package com.yhy;

import io.netty.buffer.ByteBuf;
import io.netty.channel.*;


public class MyChannelOutboundHandler1 extends ChannelOutboundHandlerAdapter {

    /**
     * 通过 write() 返回的 Future来等待成功通知。
     * @param ctx
     * @param msg
     * @param promise
     */
    @Override
    // 向client发送消息
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise){
        String resutl = (String)msg;
        //write 时候使用的内存要是 ctx 维护的
        ByteBuf buffer = ctx.alloc().buffer(resutl.length());
        buffer.writeBytes(resutl.getBytes());

        ChannelFuture future = ctx.write(buffer);
        //等待发送成功的通知。
        future.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                System.out.println("future: MyChannelOutboundHandler1 收到 write() 成功的消息");
            }
        });

        //等待整个链执行完的通知
        promise.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                System.out.println("promise: MyChannelOutboundHandler1 收到 promise 最终在最终执行完毕的通知");
            }
        });


        ctx.flush();
        //通知所有等待此 promise 的 ChannelFutureListener
        promise.setSuccess();
    }
}
